home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / tags.arc / TAG.M < prev    next >
Text File  |  1987-04-13  |  2KB  |  101 lines

  1. ;*********************************
  2. ;** tag.m        goto macro or
  3. ;**                function based on
  4. ;**                supplied tag.
  5. ;**
  6.  
  7. (macro tag
  8. (
  9.     (string
  10.         tag_name
  11.         pattern
  12.         file
  13.         extension
  14.         f_pat
  15.     )
  16.     (int
  17.         old_buf
  18.         new_buf
  19.     )
  20.     
  21.     (= old_buf (inq_buffer))
  22.     (if (&& (!= (get_parm 0 tag_name "tag: ") 0)(!= tag_name ""))
  23.     (
  24.         (sprintf pattern "<%s[\\t]" tag_name)
  25.         (= new_buf (create_buffer "Tags" "tags" 1))
  26.         (set_buffer new_buf)
  27.         (top_of_buffer)
  28.         (if (> (search_fwd pattern) 0)
  29.         (
  30.             (beginning_of_line)
  31.            (get_token) ;** skip tag name
  32.             (= file (get_token))
  33.             (= pattern (get_token))
  34.             (= f_pat (substr pattern 1 1))
  35.             (set_buffer old_buf)
  36.             (delete_buffer new_buf)
  37.             (edit_file file)
  38.             (inq_names NULL extension NULL)
  39.             (set_msg_level 3)
  40.             (execute_macro (+ "." extension))
  41.             (set_msg_level 0)
  42.             (top_of_buffer)
  43.             (if (isdigit f_pat)
  44.             (
  45.                 (move_abs (atoi pattern) 1)
  46.             )
  47.             ;else
  48.             (
  49.                 (search_fwd pattern)
  50.             ))
  51.         )
  52.         ;else
  53.         (
  54.             (message "%s not in tags file" tag_name)
  55.             (set_buffer old_buf)
  56.             (delete_buffer new_buf)
  57.         ))
  58.     )
  59.     ;else
  60.     (
  61.         (message "")
  62.     ))
  63. ))
  64.  
  65. (macro isdigit
  66. (
  67.     (string chr)
  68.     (if (get_parm 0 chr)
  69.     (
  70.         (if (&& (>= chr "0")(<= chr "9"))
  71.         (
  72.             (returns 1)
  73.         )
  74.         ;else
  75.         (
  76.             (returns 0)
  77.         ))
  78.     )
  79.     ;else
  80.     (
  81.         (returns 0)
  82.     ))
  83. ))
  84.  
  85. (macro get_token
  86. (
  87.     (string
  88.         token
  89.         char
  90.     )
  91.     
  92.     (= token "")
  93.     (while (== (index "\t\n" (= char (read 1))) 0)
  94.     (
  95.         (+= token char)
  96.         (next_char)
  97.     ))
  98.     (returns token)
  99.     (next_char)
  100. ))
  101.